<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <div id="box"></div>
    <script>
      //名字、身高、年龄、性别、体重、学习成绩（语文、数学、英语）、排名
      const testData = [
        {
          name: "张三",
          height: 175,
          age: 22,
          gender: "男",
          weight: 70,
          scores: {
            Chinese: 80,
            Math: 90,
            English: 85,
          },
          rank: 3,
        },
        {
          name: "李四",
          height: 168,
          age: 20,
          gender: "男",
          weight: 60,
          scores: {
            Chinese: 85,
            Math: 78,
            English: 92,
          },
          rank: 1,
        },
        {
          name: "王五",
          height: 162,
          age: 19,
          gender: "女",
          weight: 50,
          scores: {
            Chinese: 90,
            Math: 88,
            English: 92,
          },
          rank: 2,
        },
        {
          name: "赵六",
          height: 170,
          age: 21,
          gender: "男",
          weight: 72,
          scores: {
            Chinese: 70,
            Math: 80,
            English: 75,
          },
          rank: 5,
        },
        {
          name: "钱七",
          height: 165,
          age: 20,
          gender: "女",
          weight: 55,
          scores: {
            Chinese: 78,
            Math: 92,
            English: 85,
          },
          rank: 4,
        },
      ];
      // 找出三门成绩中最高分和最低分之差最大的学生的名字。
      // let maxValue = -1,
      //   name;
      // testData.forEach((currentItem) => {
      //   let val =
      //     Math.max(...Object.values(currentItem.scores)) -
      //     Math.min(...Object.values(currentItem.scores));
      //   if (val > maxValue) {
      //     maxValue = val;
      //     name = currentItem.name;
      //   }
      // });
      // console.log(name, maxValue);
      // let gArr = testData.filter((item) => {
      //   return item.gender == "女";
      // });
      // let count = 0;
      // gArr.forEach((currentItem) => {
      //   count += currentItem.height;
      // });
      // console.log(gArr);
      // console.log(count / gArr.length);
      // 计算每个学生的语文、数学、英语三门成绩的标准差，将标准差最大的学生的名字输出。

      // //计算标准差函数 (学生成绩对象)
      // function calculateStandardDeviation(scores) {
      //   //使用 Object.values获取对象的所有值 ，进行累加起来 获取总分数
      //   const sum = Object.values(scores).reduce(
      //     (accumulator, currentValue) => accumulator + currentValue
      //   );
      //   //通过总分数和门课的长度求得平均值
      //   const mean = sum / Object.keys(scores).length;
      //   //获取所有值 把每个的值减去平均值 然后求平方数组
      //   const squaredDifferences = Object.values(scores).map((x) =>
      //     Math.pow(x - mean, 2)
      //   );
      //   //通平均差数组累加起来/长度 得到方差
      //   const variance =
      //     squaredDifferences.reduce(
      //       (accumulator, currentValue) => accumulator + currentValue
      //     ) / Object.keys(scores).length;
      //   //开根
      //   return Math.sqrt(variance);
      // }
      // //1、获取到每个同学的分数对象
      // //    scores: {
      // //       Chinese: 78,
      // //       Math: 92,
      // //       English: 85,
      // //     },
      // // 2. 把分数进行累加得到总和
      // // 3. 计算平均值 分数总和/长度
      // // 4. 每个分数-平均值）的2次方  == （[78-60]）*（78-60）
      // // 5. 把上一步的平方值进行累加 然后 /长度 == 均值
      // // 6. 开平方根 得到结果

      // function findStudentWithMaximumStandardDeviation(students) {
      //   //存储目前最大标准差
      //   let maxStandardDeviation = -1;
      //   //存储学生名字
      //   let studentName = "";
      //   //循环所有的学生
      //   for (let i = 0; i < students.length; i++) {
      //     //每次调用计算标准差的函数 得到该学生的标准差
      //     const standardDeviation = calculateStandardDeviation(
      //       students[i].scores
      //     );
      //     //判断是否是最大的标准差
      //     if (standardDeviation > maxStandardDeviation) {
      //       maxStandardDeviation = standardDeviation;
      //       studentName = students[i].name;
      //     }
      //   }
      //   return studentName;
      // }

      // // 10.找出三门成绩中最高分和最低分之差最大的学生的名字。
      // function findStudentWithLargestRangeOfScores(students) {
      //   let largestRange = -1;
      //   let studentName = "";
      //   for (let i = 0; i < students.length; i++) {
      //     const scores = Object.values(students[i].scores);
      //     const range = Math.max(...scores) - Math.min(...scores);
      //     if (range > largestRange) {
      //       largestRange = range;
      //       studentName = students[i].name;
      //     }
      //   }
      //   return studentName;
      // }

      // console.log(
      //   "三门成绩中最高分和最低分之差最大的学生是：",
      //   findStudentWithLargestRangeOfScores(testData)
      // );
      const ageGroups = {}; // 存储每个年龄段的体重信息
      testData.forEach((student) => {
        const ageGroup = Math.floor(student.age / 10); // 计算学生所在的年龄段  21/10==2.1 =2  19/10==1.9=1
        if (!ageGroups[ageGroup]) {
          ageGroups[ageGroup] = {
            totalWeight: student.weight,
            numStudents: 1,
          };
        } else {
          ageGroups[ageGroup].totalWeight += student.weight;
          ageGroups[ageGroup].numStudents++;
        }
      });
      // 输出结果
      console.log("每个年龄段的平均体重（kg）：", ageGroups);
    </script>
  </body>
</html>
